#pragma once
#include "uart/ProtocolSender.h"
#include "logic_utility.hpp"




namespace{
	SProtocolData naviData;
	void setACC(){
		micon_03Ptr->setVisible(naviData.ACC.bits.bit3);
		micon_01Ptr->setVisible(naviData.ACC.bits.bit4);
		micon_13Ptr->setVisible(naviData.ACC.bits.bit5);
	}

	void setGear(){
		if(naviData.gear == 4){
			if(naviData.gearRank != 7){

			}

		}

		if(!mgearPtr->isVisible()){
			mgearPtr->setVisible(true);
		}
		switch (naviData.gear) {
		case 0:{
			mgearPtr->setBackgroundPic("navibar/gear/P.png");
		}break;
		case 1:{
			mgearPtr->setBackgroundPic("navibar/gear/R.png");
		}break;
		case 2:{
			mgearPtr->setBackgroundPic("navibar/gear/N.png");
		}break;
		case 3:{
			mgearPtr->setBackgroundPic("navibar/gear/D.png");
		}break;
		case 4:{
			mgearPtr->setBackgroundPic("navibar/gear/M.png");
		}break;
			default:
				mgearPtr->setVisible(false);
				break;
		}

	}
	void Initialization(){
		setACC();
		setGear();
	}
	typedef struct {
		char iconNormal;
		char iconBig;
		const char* Str;
	} S_ICONINFO;

	const S_ICONINFO iconTab[] = {
			'1', 'A', "MyView",
			'2', 'B', "行车电脑/油耗",
			'3', 'C', "Raptor信息",
			'4', 'D', "拖车",
			'5', 'E', "设置"
	};
	int Level1Index,Level2Index,Level3Index;
}
/**
 * 注册定时器
 * 填充数组用于注册定时器
 * 注意：id不能重复
 */
static S_ACTIVITY_TIMEER REGISTER_ACTIVITY_TIMER_TAB[] = {

};

/**
 * 当界面构造时触发
 */
static void onUI_init(){
    Initialization();
}

/*
 * 当界面完全退出时触发
 */
static void onUI_quit() {

}

/**
 * 串口数据回调接口
 */
static void onProtocolDataUpdate(const SProtocolData &data) {
    if(naviData.ACC != data.ACC){
    	naviData.ACC = data.ACC;
    	setACC();
    }
    if(naviData.gear != data.gear){
    	naviData.gear = data.gear;
    	setGear();
    }
}

/**
 * 定时器触发函数
 * 不建议在此函数中写耗时操作，否则将影响UI刷新
 * 参数： id
 *         当前所触发定时器的id，与注册时的id相同
 * 返回值: true
 *             继续运行当前定时器
 *         false
 *             停止运行当前定时器
 */
static bool onUI_Timer(int id){
	switch (id) {

		default:
			break;
	}
    return true;
}

/**
 * 有新的触摸事件时触发
 * 参数：ev
 *         新的触摸事件
 * 返回值：true
 *            表示该触摸事件在此被拦截，系统不再将此触摸事件传递到控件上
 *         false
 *            触摸事件将继续传递到控件上
 */
static bool onnavibarActivityTouchEvent(const MotionEvent &ev) {
    switch (ev.mActionStatus) {
		case MotionEvent::E_ACTION_DOWN://触摸按下
			//LOGD("时刻 = %ld 坐标  x = %d, y = %d", ev.mEventTime, ev.mX, ev.mY);
			break;
		case MotionEvent::E_ACTION_MOVE://触摸滑动
			break;
		case MotionEvent::E_ACTION_UP:  //触摸抬起
			break;
		default:
			break;
	}
	return false;
}

static int getListItemCount_ListViewLevel1(const ZKListView *pListView) {
    //LOGD("getListItemCount_ListViewLevel1 !\n");
    return 5;
}

static void obtainListItemData_ListViewLevel1(ZKListView *pListView,ZKListView::ZKListItem *pListItem, int index) {
		ZKListView::ZKListSubItem * pitemIcon = pListItem->findSubItemByID(ID_NAVIBAR_SubItem1);
		ZKListView::ZKListSubItem * pitemText = pListItem->findSubItemByID(ID_NAVIBAR_SubItem2);

		pitemText->setText(iconTab[index].Str);
		if(Level1Index != index){
			pitemIcon->setText(iconTab[index].iconNormal);
			pListItem->setSelected(false);
		}else{
			pitemIcon->setText(iconTab[index].iconBig);
			pListItem->setSelected(true);
		}
}

static void onListItemClick_ListViewLevel1(ZKListView *pListView, int index, int id) {
    //LOGD(" onListItemClick_ ListViewLevel1  !!!\n");
}
